package org.smile.auth.session;

import org.smile.auth.session.redis.RedisSession;

import java.util.Enumeration;
import java.util.List;
import java.util.Set;

public interface Store<T extends  Session> {
	/**
	 * 从拷久化加载session
	 * @param sessionId
	 * @return
	 */
	public T load(String sessionId);

	public T loadByToken(String token);

	void saveBaseByToken(RedisSession session);

	/**
	 * 持久化
	 * @param session
	 */
	public void save(T session);

	public void saveBase(T session);
	/**
	 * 移除session
	 * @param sessionId
	 * @return
	 */
	public boolean remove(String sessionId);
	
	/**
	 * 只更新一个属性
	 * @param session 要更新的session对象
	 * @param name 需要更新的属性名
	 */
	public void setAttribute(T session,String name,Object value);
	/**
	 * 获取一个属性
	 * @param session 要更新的session对象
	 * @param name 需要更新的属性名
	 */
	public Object getAttribute(T session,String name);
	/**
	 * 删除一个属性
	 * @param session
	 * @param name
	 */
	public void removeAttribute(T session, String name);
	
	/**
	 * 设置manager引用
	 * @param manager
	 */
	public void setManager(Manager manager);
	
	/***
	 * 做一次访问记录
	 */
	public void access(T session);
	/**
	 * 所有attribute名称
	 * **/
	public Enumeration<String> getAttributeNames(T session);

	public Set<String> getValueNames(T session);
}
